package com.example.timingapplication

object StringUtils {

    const val MORNING_HOUR_SETTING_KEY = "morning_hour_setting_key"
    const val MORNING_MINUTE_SETTING_KEY = "morning_minute_setting_key"
    const val NOON_HOUR_SETTING_KEY = "noon_hour_setting_key"
    const val NOON_MINUTE_SETTING_KEY = "noon_minute_setting_key"
    const val EVENING_HOUR_SETTING_KEY = "evening_hour_setting_key"
    const val EVENING_MINUTE_SETTING_KEY = "evening_minute_setting_key"

    /**
     * 分割包含中文冒号和英文冒号的字符串
     * @param text 包含中英文冒号的字符串
     * @param limit 分割限制，默认为0表示不限制
     * @return 分割后的字符串数组
     */
    @JvmStatic
    fun splitWithColon(text: String, limit: Int = 0): Array<String> {
        // 使用正则表达式同时匹配中文冒号和英文冒号进行分割
        return if (limit > 0) {
            text.split("[:：]".toRegex(), limit).toTypedArray()
        } else {
            text.split("[:：]".toRegex()).toTypedArray()
        }
    }

    /**
     * 分割包含中英文冒号的字符串，并去除首尾空格
     * @param text 包含中英文冒号的字符串
     * @param limit 分割限制，默认为0表示不限制
     * @return 分割并去除首尾空格后的字符串数组
     */
    @JvmStatic
    fun splitWithColonAndTrim(text: String, limit: Int = 0): Array<String> {
        return splitWithColon(text, limit).map { it.trim() }.toTypedArray()
    }

    /**
     * 验证时间字符串格式是否正确（前两位数字，中间中英文冒号，后两位数字）
     * @param timeString 时间字符串
     * @return 验证结果
     */
    @JvmStatic
    fun isValidTimeFormat(timeString: String): Boolean {
        return timeString.matches(Regex("^\\d{1,2}[:：]\\d{1,2}$"))
    }

    /**
     * 解析并优化时间字符串
     * @param timeString 时间字符串
     * @return 解析后的时间数组 [hour, minute]，如果解析失败返回null
     */
    @JvmStatic
    fun parseAndOptimizeTime(timeString: String): IntArray? {
        if (!isValidTimeFormat(timeString)) {
            return null
        }

        val parts = splitWithColonAndTrim(timeString)
        if (parts.size != 2) {
            return null
        }

        return try {
            val hour = parts[0].toInt()
            val minute = parts[1].toInt()

            // 验证时间范围是否有效
            if (hour in 0..23 && minute in 0..59) {
                intArrayOf(hour, minute)
            } else {
                null
            }
        } catch (e: NumberFormatException) {
            null
        }
    }

    /**
     * 格式化时间为标准格式（HH:mm）
     * @param hour 小时
     * @param minute 分钟
     * @return 格式化后的时间字符串
     */
    @JvmStatic
    fun formatTime(hour: Int, minute: Int): String {
        return String.format("%02d:%02d", hour, minute)
    }
}
